home *** CD-ROM | disk | FTP | other *** search
/ The Atari Compendium / The Atari Compendium (Toad Computers) (1994).iso / files / umich / tex / td187src.lzh / MAGICXBI.I < prev    next >
Text File  |  1991-06-08  |  14KB  |  757 lines

  1. (*######################################################################
  2.                                                                         
  3.   MAGIC         Modula's  All purpose  GEM  Interface  Cadre
  4.                 ¯         ¯            ¯    ¯          ¯
  5. ########################################################################
  6.  
  7.   XBIOS  Extended Basic Input Output System     Interface for Modula-2
  8.  
  9.                 Implementation für Megamax-Modula-2
  10.  
  11. ########################################################################
  12.   V2.00  16.10.90  Peter Hellinger      Anpassung an neues MagicSys
  13.   V1.04  05.08.90  Peter Hellinger
  14.   V1.01  18.06.90  Peter Hellinger      Bugs gefixed
  15.   V1.00  (c) by    Peter Hellinger
  16. ######################################################################*)
  17.  
  18. IMPLEMENTATION MODULE MagicXBIOS;
  19.  
  20. (*------------------------------*)
  21. (*    MM2-COMPILERSWITCHES      *)      
  22. (*                              *)
  23. (*$R-   Range-Checks            *)
  24. (*$S-   Stack-Check             *)
  25. (*------------------------------*)
  26.  
  27.  
  28. FROM SYSTEM IMPORT ADDRESS, ADR, WORD, BYTE, ASSEMBLER;
  29. FROM MagicSys   IMPORT  Nil, Null, Bit0, Bit1, Bit2, Bit3, Bit4, Bit5, Bit6, Bit7,
  30.                         Bit8, Bit9, Bit10, Bit11, Bit12, Bit13, Bit14, Bit15,
  31.                         LOC, Byte, ByteSet, sWORD, sINTEGER, sCARDINAL, sBITSET,
  32.                         lWORD, lINTEGER, lCARDINAL, lBITSET;
  33. IMPORT MagicSys;
  34.  
  35.  
  36.  
  37. VAR     a, b, d:        ADDRESS;
  38.         c:              sCARDINAL;
  39.         i:              sINTEGER;
  40.         l:              lINTEGER;
  41.  
  42.  
  43. PROCEDURE Initmouse (type: sINTEGER; VAR param: ARRAY OF LOC; vec: PROC);
  44. BEGIN
  45.  ASSEMBLER
  46.   MOVE.L  vec(A6), -(SP)
  47.   MOVE.L  param(A6), -(SP)
  48.   MOVE.W  type(A6), -(SP)
  49.   MOVE.W  #0, -(SP);
  50.   TRAP    #14
  51.   LEA     12(SP), SP
  52.  END;
  53. END Initmouse;
  54.  
  55.  
  56. PROCEDURE Physbase (): ADDRESS;
  57. BEGIN
  58.  ASSEMBLER
  59.   MOVE.W  #2, -(SP);
  60.   TRAP    #14
  61.   ADDQ.L  #2, SP
  62.   MOVE.L  D0, a
  63.  END;
  64.  RETURN a;
  65. END Physbase;
  66.  
  67.  
  68. PROCEDURE Logbase (): ADDRESS;
  69. BEGIN
  70.  ASSEMBLER
  71.   MOVE.W  #3, -(SP);
  72.   TRAP    #14
  73.   ADDQ.L  #2, SP
  74.   MOVE.L  D0, a
  75.  END;
  76.  RETURN a;
  77. END Logbase;
  78.  
  79.  
  80. PROCEDURE Getrez (): sINTEGER;
  81. BEGIN
  82.  ASSEMBLER
  83.   MOVE.W  #4, -(SP);
  84.   TRAP    #14
  85.   ADDQ.L  #2, SP
  86.   MOVE.W  D0, i
  87.  END;
  88.  RETURN i;
  89. END Getrez;
  90.  
  91.  
  92. PROCEDURE Setscreen (log, phys: ADDRESS; rez: sINTEGER);
  93. BEGIN
  94.  ASSEMBLER
  95.   MOVE.W  rez(A6), -(SP)
  96.   MOVE.L  phys(A6), -(SP)
  97.   MOVE.L  log(A6), -(SP)
  98.   MOVE.W  #5, -(SP)
  99.   TRAP    #14
  100.   LEA     $C(SP), SP
  101.  END;
  102. END Setscreen;
  103.  
  104.  
  105. PROCEDURE Setpalette (VAR palette: ARRAY OF LOC);
  106. BEGIN
  107.  ASSEMBLER
  108.   MOVE.L  palette(A6), -(SP)
  109.   MOVE.W  #6, -(SP)
  110.   TRAP    #14
  111.   ADDQ.L  #6, SP
  112.  END;
  113. END Setpalette;
  114.  
  115.  
  116. PROCEDURE Setcolor (colNum, color: sCARDINAL): sCARDINAL;
  117. VAR c: sCARDINAL;
  118. BEGIN
  119.  ASSEMBLER
  120.   MOVE.W  color(A6), -(SP)
  121.   MOVE.W  colNum(A6), -(SP)
  122.   MOVE.W  #7, -(SP)
  123.   TRAP    #14
  124.   ADDQ.L  #6, SP
  125.   MOVE.W  D0, c(A6)
  126.  END;
  127.  RETURN c;
  128. END Setcolor;
  129.  
  130.  
  131. PROCEDURE Floprd (buf: ADDRESS; drv, sec, trck, side, count: sINTEGER): sINTEGER;
  132. VAR i: sINTEGER;
  133. BEGIN
  134.  ASSEMBLER
  135.   MOVE.W  count(A6), -(SP)
  136.   MOVE.W  side(A6), -(SP)
  137.   MOVE.W  trck(A6), -(SP)
  138.   MOVE.W  sec(A6), -(SP)
  139.   MOVE.W  drv(A6), -(SP)
  140.   MOVE.L  #0, -(SP)
  141.   MOVE.L  buf(A6), -(SP)
  142.   MOVE.W  #8, -(SP)
  143.   TRAP    #14
  144.   LEA     $14(SP), SP
  145.   MOVE.W  D0, i(A6)
  146.  END;
  147.  RETURN i;
  148. END Floprd;
  149.  
  150.  
  151. PROCEDURE Flopwr (buf: ADDRESS; drv, sec, trck, side, count: sINTEGER): sINTEGER;
  152. VAR i: sINTEGER;
  153. BEGIN
  154.  ASSEMBLER
  155.   MOVE.W  count(A6), -(SP)
  156.   MOVE.W  side(A6), -(SP)
  157.   MOVE.W  trck(A6), -(SP)
  158.   MOVE.W  sec(A6), -(SP)
  159.   MOVE.W  drv(A6), -(SP)
  160.   MOVE.L  #0, -(SP)
  161.   MOVE.L  buf(A6), -(SP)
  162.   MOVE.W  #9, -(SP)
  163.   TRAP    #14
  164.   LEA     $14(SP), SP
  165.   MOVE.W  D0, i(A6)
  166.  END;
  167.  RETURN i;
  168. END Flopwr;
  169.  
  170.  
  171. PROCEDURE Flopfmt (buf: ADDRESS; drv, spt, trck, side, il, virgin: sINTEGER): sINTEGER;
  172. VAR i: sINTEGER;
  173. BEGIN
  174.  ASSEMBLER
  175.   MOVE.W  virgin(A6), -(SP)
  176.   MOVE.L  #$087654321, -(SP)
  177.   MOVE.W  il(A6), -(SP)
  178.   MOVE.W  side(A6), -(SP)
  179.   MOVE.W  trck(A6), -(SP)
  180.   MOVE.W  spt(A6), -(SP)
  181.   MOVE.W  drv(A6), -(SP)
  182.   MOVE.L  #0, -(SP)
  183.   MOVE.L  buf(A6), -(SP)
  184.   MOVE.W  #10, -(SP)
  185.   TRAP    #14
  186.   LEA     $1A(SP), SP
  187.   MOVE.W  D0, i(A6)
  188.  END;
  189.  RETURN i;
  190. END Flopfmt;
  191.  
  192.  
  193. PROCEDURE Midiws (VAR string: ARRAY OF Byte; len: sCARDINAL);
  194. BEGIN
  195.  ASSEMBLER
  196.   MOVE.L  string(A6), -(SP)
  197.   MOVE.W  len(A6), -(SP)
  198.   MOVE.W  #12, -(SP)
  199.   TRAP    #14
  200.   ADDQ.L  #8, SP
  201.  END;
  202. END Midiws;
  203.  
  204.  
  205. PROCEDURE Mfpint (intNo: sCARDINAL; vector: PROC);
  206. BEGIN
  207.  ASSEMBLER
  208.   MOVE.L  vector(A6), -(SP)
  209.   MOVE.W  intNo(A6), -(SP)
  210.   MOVE.W  #13, -(SP)
  211.   TRAP    #14
  212.   ADDQ.L  #8, SP
  213.  END;
  214. END Mfpint;
  215.  
  216.  
  217. PROCEDURE Iorec (dev: sINTEGER): ADDRESS;
  218. VAR a: ADDRESS;
  219. BEGIN
  220.  ASSEMBLER
  221.   MOVE.W  dev(A6), -(SP)
  222.   MOVE.W  #14, -(SP)
  223.   TRAP    #14
  224.   ADDQ.L  #4, SP
  225.   MOVE.L  D0, a(A6)
  226.  END;
  227.  RETURN a;
  228. END Iorec;
  229.  
  230.  
  231. PROCEDURE Rsconf (speed: sINTEGER; flavor: sBITSET;  u, r, t, s: sINTEGER): sINTEGER;
  232. VAR i: sINTEGER;
  233. BEGIN
  234.  ASSEMBLER
  235.   MOVE.W  s(A6), -(SP)
  236.   MOVE.W  t(A6), -(SP)
  237.   MOVE.W  r(A6), -(SP)
  238.   MOVE.W  u(A6), -(SP)
  239.   MOVE.W  flavor(A6), -(SP)
  240.   MOVE.W  speed(A6), -(SP)
  241.   MOVE.W  #15, -(SP)
  242.   TRAP    #14
  243.   LEA     $E(SP), SP
  244.   MOVE.W  D0, i(A6)
  245.  END;
  246.  RETURN i;
  247. END Rsconf;
  248.  
  249.  
  250. PROCEDURE Keytbl (VAR unshift, shift, capslock: ADDRESS): ADDRESS;
  251. BEGIN
  252.  a:= unshift;
  253.  b:= shift;
  254.  d:= capslock;
  255.  ASSEMBLER
  256.   MOVE.L  a, -(SP)
  257.   MOVE.L  b, -(SP)
  258.   MOVE.L  d, -(SP)
  259.   MOVE.W  #16, -(SP)
  260.   TRAP    #14
  261.   LEA     $E(SP), SP
  262.   MOVE.L  D0, a
  263.  END;
  264.  RETURN a;
  265. END Keytbl;
  266.  
  267.  
  268. PROCEDURE Random(): lCARDINAL;
  269. VAR l: lCARDINAL;
  270. BEGIN
  271.  ASSEMBLER
  272.   MOVE.W  #17, -(SP)
  273.   TRAP    #14
  274.   ADDQ.L  #2, SP
  275.   MOVE.L  D0, l(A6)
  276.  END;
  277.  RETURN l;
  278. END Random;
  279.  
  280.  
  281. PROCEDURE Protobt (buf: ADDRESS; num: lINTEGER; typ, exec: sINTEGER);
  282. BEGIN
  283.  ASSEMBLER
  284.   MOVE.W  exec(A6), -(SP)
  285.   MOVE.W  typ(A6), -(SP)
  286.   MOVE.L  num(A6), -(SP)
  287.   MOVE.L  buf(A6), -(SP)
  288.   MOVE.W  #18, -(SP)
  289.   TRAP    #14
  290.   LEA     $E(SP), SP
  291.  END;
  292. END Protobt;
  293.  
  294.  
  295. PROCEDURE Flopver (buf: ADDRESS; drv, sec, trck, side, count: sINTEGER): sINTEGER;
  296. VAR i: sINTEGER;
  297. BEGIN
  298.  ASSEMBLER
  299.   MOVE.W  count(A6), -(SP)
  300.   MOVE.W  side(A6), -(SP)
  301.   MOVE.W  trck(A6), -(SP)
  302.   MOVE.W  sec(A6), -(SP)
  303.   MOVE.W  drv(A6), -(SP)
  304.   MOVE.L  #0, -(SP)
  305.   MOVE.L  buf(A6), -(SP)
  306.   MOVE.W  #19, -(SP)
  307.   TRAP    #14
  308.   LEA     $E(SP), SP
  309.   MOVE.W  D0, i(A6)
  310.  END;
  311.  RETURN i;
  312. END Flopver;
  313.  
  314.  
  315. PROCEDURE Scrdmp;
  316. BEGIN
  317.  ASSEMBLER
  318.   MOVE.W  #20, -(SP)
  319.   TRAP    #14
  320.   ADDQ.L  #2, SP
  321.  END;
  322. END Scrdmp;
  323.  
  324.  
  325. PROCEDURE Cursconf (function, operand: sINTEGER): sINTEGER;
  326. VAR i: sINTEGER;
  327. BEGIN
  328.  ASSEMBLER
  329.   MOVE.W  operand(A6), -(SP)
  330.   MOVE.W  function(A6), -(SP)
  331.   MOVE.W  #21, -(SP)
  332.   TRAP    #14
  333.   ADDQ.L  #6, SP
  334.   MOVE.W  D0, i(A6)
  335.  END;
  336.  RETURN i;
  337. END Cursconf;
  338.  
  339.  
  340. PROCEDURE Settime (datetime: lCARDINAL);
  341. BEGIN
  342.  ASSEMBLER
  343.   MOVE.W  datetime(A6), -(SP)
  344.   MOVE.W  #22, -(SP)
  345.   TRAP    #14
  346.   ADDQ.L  #6, SP
  347.  END;
  348. END Settime;
  349.  
  350.  
  351. PROCEDURE Gettime (): lCARDINAL;
  352. VAR l: lCARDINAL;
  353. BEGIN
  354.  ASSEMBLER
  355.   MOVE.W    #23, -(SP)
  356.   TRAP    #14
  357.   ADDQ.L  #6, SP
  358.   MOVE.L  D0, l(A6)
  359.  END; 
  360.  RETURN l;
  361. END Gettime;
  362.  
  363.  
  364. PROCEDURE Bioskeys;
  365. BEGIN
  366.  ASSEMBLER
  367.   MOVE.W  #24, -(SP)
  368.   TRAP    #14
  369.   ADDQ.L  #2, SP
  370.  END;
  371. END Bioskeys;
  372.  
  373.  
  374. PROCEDURE Ikbdws (str: ARRAY OF LOC; len: sCARDINAL);
  375. BEGIN
  376.  ASSEMBLER
  377.   MOVE.W  str(A6), -(SP)
  378.   MOVE.W  len(A6), -(SP)
  379.   MOVE.W  #25, -(SP)
  380.   TRAP    #14
  381.   ADDQ.L  #8, SP
  382.  END; 
  383. END Ikbdws;
  384.  
  385.  
  386. PROCEDURE Jdisint (intNo: sCARDINAL);
  387. BEGIN
  388.  ASSEMBLER
  389.   MOVE.W  intNo(A6), -(SP)
  390.   MOVE.W  #26, -(SP)
  391.   TRAP    #14
  392.   ADDQ.L  #4, SP
  393.  END;
  394. END Jdisint;
  395.  
  396.  
  397. PROCEDURE Jenabint (intNo: sCARDINAL);
  398. BEGIN
  399.  ASSEMBLER
  400.   MOVE.W  intNo(A6), -(SP)
  401.   MOVE.W  #27, -(SP)
  402.   TRAP    #14
  403.   ADDQ.L  #4, SP
  404.  END;
  405. END Jenabint;
  406.  
  407.  
  408. PROCEDURE Giaccess (regno: sCARDINAL; data: Byte): sCARDINAL;
  409. VAR c: sCARDINAL;
  410. BEGIN
  411.  c:= ORD (data);
  412.  ASSEMBLER
  413.   MOVE.W  regno(A6), -(SP)
  414.   MOVE.W  c(A6), -(SP)
  415.   MOVE.W  #28, -(SP)
  416.   TRAP    #14